//
//  LBStatisticsTask.h
//  LBStatistics
//
//  Created by WuShiHai on 19/5/24.
//  Copyright (c) 2019 Lebbay. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "LBStatisticsTaskData.h"
typedef NS_ENUM(NSInteger, LBStatisticsTaskState) {
    LBStatisticsTaskStateWaiting = 0, /* 等待发送 */
    LBStatisticsTaskStateSending , /* 正在发送 */
    LBStatisticsTaskStateReSendWaiting,
    /* 等待重新发送,还没有到等待时间之后,这个状态的任务外部不应该启动 */
    LBStatisticsTaskStateSuccess, /* 发送成功 */
    LBStatisticsTaskStateFail /* 发送失败 */
};




@class LBStatisticsTask;
@protocol LBStatisticsTaskDelegate <NSObject>

//发送成功
- (void)taskSuccess:(LBStatisticsTask *)task;

//一次请求失败
- (void)taskFailOne:(LBStatisticsTask *)task error:(NSString *)errorMsg;

//发送失败
- (void)taskFail:(LBStatisticsTask *)task;

//任务等待了5s后，准备重新开始任务
//将每一个任务的重试独立出来，避免多个任务同时等待重试，造成模块处于假死状态
- (void)taskWillResend:(LBStatisticsTask*)task;
@end

@interface LBStatisticsTask : NSObject

//初始化一个对象，里面包含多个请求的taskdata
- (instancetype)initWithTaskDatas:(NSArray *)taskDatas;

/** 一个任务中包含的请求元数组 */
@property (nonatomic, strong,readonly) NSArray *taskDatas;

/** 任务中所有数据，都属于相同的type类型 */
@property (nonatomic, assign,readonly) LBStatisticsTaskType type;

/** 请求所出的状态 */
@property (nonatomic, assign,readonly) LBStatisticsTaskState state;

@property (nonatomic,weak) id<LBStatisticsTaskDelegate> delegate;

/** 这次任务的重试次数 */
@property (nonatomic, assign) NSInteger maxRetryCount;

/** 当前重试次数 */
@property (nonatomic, assign,readonly) NSInteger retryCount;

/** 服务器地址 */
@property (nonatomic, copy,readonly) NSString *url;
/** 重试参数 */
@property (nonatomic, copy,readonly) NSString *params;

/** 开始发送 */
- (void)start;

/** 停止发送 */
- (void)stop;
@end
